<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>defineproperty</title>
    <script src="js/vue.js"></script>
</head>
<body>
<script>
    let number = 26;
    let person = {
        name: '张三',
        sex: '男',
    };
    // 这种方式添加age是不可枚举的
    Object.defineProperty(person, 'age', {
        value: 18,
    });
    console.log(Object.keys(person));   //['name', 'sex']

    // score属性可以被枚举出来
    Object.defineProperty(person, 'score', {
        value: 90,
        enumerable: true,   // 属性是否能被枚举，默认是false
        writable: true,     // 控制属性是否能被修改，默认是false
        configurable: true, // 控制属性能否被delete删除，默认是false
    });
    console.log(Object.keys(person));   //['name', 'sex', 'score']

    Object.defineProperty(person, 'ChineseScore', {
        // 当有人读取ChineseScore时会被调用
        get: function () {
            return number;
        },
        // get也可以这样简写 当有人修改ChineseScore时set就会被调用
        set(value) {
            console.log('修改了ChineseScore', value);
            number = value;
        }
    });
    console.log(person)
</script>
</body>
</html>